package com.itlong.cloud.property.dao;

import com.itlong.cloud.POJO.PO.PropertyCarManagePO;
import com.itlong.cloud.POJO.VO.property.PropertyCarGetOneVO;
import com.itlong.cloud.POJO.VO.property.PropertyCarGetPageVO;
import com.itlong.cloud.abstracts.IAbstractBaseDao;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;
import java.util.Map;

/**
 * <desc>
 *      物业管理-车辆管理持久层接口
 * </desc>
 *
 * @createDate 2018/08/17
 */
@Mapper
@Repository
public interface IPropertyCarDao extends IAbstractBaseDao<PropertyCarManagePO> {

    /**
     * <desc>
     *      获取单个车辆信息
     * </desc>
     *
     * @param params 获取单个车辆信息查询参数集
     * @return 单个车辆信息
     * @author wangzhi
     * @createDate 2018/08/22
     */
    PropertyCarGetOneVO getOneBasicCar(Map<String, Object> params);

    /**
     * <desc>
     *      分页获取车辆信息
     * </desc>
     *
     * @param params 查询参数
     * @return 结果集
     * @author wangzhi
     * @createDate 2018/08/22
     */
    List<PropertyCarGetPageVO> getCarsByPage(Map<String, Object> params);

    /**
     * <desc>
     *      获取车辆信息总记录数
     * </desc>
     *
     * @param params 查询参数
     * @return 记录数
     * @author wangzhi
     * @createDate 2018/08/22
     */
    Integer getCarsRecordCount(Map<String, Object> params);

    /**
     * <desc>
     *      保存车辆信息
     * </desc>
     *
     * @param map 参数集
     * @return 保存的行数
     * @author wangzhi
     * @createDate 2018/08/22
     */
    Integer saveCar(Map<String, Object> map);

    /**
     * <desc>
     *      删除车辆，含批量删除
     * </desc>
     *
     * @param carIdList 车辆id集合
     * @return 受影响的行数
     * @author wangzhi
     * @createDate 2018/08/23
     */
    Integer deleteCars(List<String> carIdList);

    /**
     * <desc>
     *      修改车辆
     * </desc>
     *
     * @param map 修改参数集
     * @return 受影响的行数
     * @author wangzhi
     * @createDate 2018/08/23
     */
    Integer updateCar(Map<String, Object> map);

    /**
     * <desc>
     *      查询所有车辆
     * </desc>
     *
     * @param params 查询参数集
     * @return 车辆集合
     * @author wangzhi
     * @createDate 2018/08/23
     */
    List<PropertyCarGetPageVO> getAllCars(Map<String, Object> params);

    /**
     * <desc>
     *      批量保存车辆信息
     * </desc>
     *
     * @param propertyCarManagePOS 车辆信息集合
     * @return 受影响行数
     * @author wangzhi
     * @createDate 2018/08/23
     */
    Integer batchSaveCars(List<PropertyCarManagePO> propertyCarManagePOS);

    /**
     * <desc>
     *      获取车辆信息集合
     * </desc>
     *
     * @param carIds 车辆id集合
     * @return 车辆信息集合
     * @author wangzhi
     * @createDate 2018/10/23
     */
    List<PropertyCarGetPageVO> getCarsByIds(List<String> carIds);

    /**
     * <desc>
     *      查询所有车牌号
     * </desc>
     *
     * @param projectId 项目编号
     * @return 项目下所有车牌号
     * @author wangzhi
     * @createDate 2019/01/07
     */
    List<String> getAllPlateNumberByProjectId(@Param("projectId") String projectId);
}
